<!--
 * @LastEditors: 七七
 * @Date: 2023-01-11 11:12:13
-->
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>call和apply</title>
</head>

<body>
  <script>
    // call() apply()
    // 函数对象的方法，需要通过函数对象来调用
    // 当函数调用call() 和apply()都会调用函数执行
    function fun(a, b) {
      // console.log('我是fun函数');
      console.log(a, b);
    }
    // fun.call(); //我是fun函数
    // fun.apply(); //我是fun函数

    // 在调用call和apply可以将一个对象指定为第一个参数
    // 此时这个对象会成为函数执行时的this
    var obj = { name: 'luck' };
    fun.call(obj)//Object{}

    // call()方法可以将实参在对象之后依次传递
    // call()方法可以将实参封装到数组在对象之后传递
    fun.call(obj, 2, 3) //2 3
    fun.apply(obj, [2, 3]) //2 3

    // this：
    // 1.以函数的形式调用时，this永远都是window
    // 2.以方法的形式调用时，this就是调用方法的那个对象
    // 3.以构造函数形式调用，this就是新建的那个对象
    // 4.使用call和apply this是指定的对象

  </script>
</body>

</html>